﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DbTaglio.SvcLayer.DbTaglioService;
using System.Web.UI.WebControls;

namespace DbTaglio.SvcLayer
{
    public class DBTManager
    {
        public RetData<DBTWinLogin> DatiUtenteLogin { get; set; }

        public string AbilitatoAlConsumo { get; set; }

        public string SPUserName { get; set; }

        public string CodFornitore { get; set; }
        
        public bool IsAdmin { get; set; }


        public DBTManager(string pSPUserName)
        {
            SPUserName = pSPUserName;
        }

        MetGet _proxyGet = null;

        # region LOGIN

        public MetGet ProxyGetWcf
        {
            get
            {
                if (_proxyGet == null)
                {                   
                    return _proxyGet = new MetGet(SPUserName, "", true);
                }
                else
                    return _proxyGet;

            }
        }

        //private void getSPuser()
        //{
        //    _spUser = SPContext.Current.Web.CurrentUser;

        //    var arr = _spUser.Name.Split(new[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
        //    if (arr != null && arr.Length > 1)
        //        _spUserName = arr[1];
        //}

        public RetData<bool> EnsureLogin(string pCodFornitore, string pIsAdmin)
        {

            bool _isAdmin = false;           

            Boolean.TryParse(pIsAdmin, out _isAdmin);
            
            IsAdmin = _isAdmin;

            if (_isAdmin)
                return new RetData<bool>(true);

            CodFornitore = pCodFornitore;
            if (!string.IsNullOrEmpty(pCodFornitore))
                return new RetData<bool>(true);

            // <option value="478840">AGILE SAS DI ROCCIA LAPO &amp; C.</option>
            // <option value="002004">ARTEA SRL</option>
            // <option value="002778">BEAUTIFUL S.R.L.</option>

            //
            DatiUtenteLogin = ProxyGetWcf.GetDBTWinAndAppLogin(SPUserName);

            if (DatiUtenteLogin.HaErrori || DatiUtenteLogin.Dati == null) //errore identificazione\prelievo utente
            {
                //LabelErrori.Text = "Errore prelievo dati utente : " + (DatiUtenteLogin.Eccezione == null ? "" : DatiUtenteLogin.Eccezione.Message);
                return new RetData<bool>(DatiUtenteLogin.Eccezione);
            }
            else
            {
                //Non Abilitato ?
                if (!DatiUtenteLogin.Dati.DBTAppUser.Abilitato) 
                    return new RetData<bool>(new Exception("Utente Non abilitato"));
                    
                //Amministratore ?
                if (DatiUtenteLogin.Dati.DBTAppUser.IsAdminAppRole) return new RetData<bool>(true);
                                
                //fornitore abilitato alla dichiarazione dei consumi reali.
                if (!DatiUtenteLogin.Dati.DBTAppUser.IsAbilitatoAlConsumo)
                    return new RetData<bool>(new Exception("Utente Non abilitato alla dich. dei consumi"));

                //Fornitore ?
                CodFornitore = DatiUtenteLogin.Dati.DBTAppUser.CodiceFornitore;
                if (CodFornitore == null) return new RetData<bool>(new Exception("Codice Fornitore non trovato"));
                 

            }

            return new RetData<bool>(true);

        }


        #endregion


        #region Helpers

        public void setDropDown<T>(RetData<T> pDati, DropDownList pDrop, string pTextField, string pValueField, Label pLabelErrori,
         bool pAddSeleziona = true, string pSelectedValue = "")
        {
            pDrop.DataTextField = pTextField;
            pDrop.DataValueField = pValueField;

            if (pDati.HaErrori)
            {
                pLabelErrori.Text += string.Format("Errore : {0} \r\n", pDati.Eccezione.Message);
            }
            else
            {
                pDrop.DataSource = pDati.Dati;
                pDrop.DataBind();

                if (pAddSeleziona)
                {
                    var it = new ListItem("Seleziona", "-1", true);
                    pDrop.Items.Add(it);
                    if (string.IsNullOrEmpty(pSelectedValue))
                        it.Selected = true;
                }

                if (!string.IsNullOrEmpty(pSelectedValue))
                    pDrop.Items.FindByValue(pSelectedValue).Selected = true;

            }
        }//fM


        public void setDropDownSingleVal<T>(RetData<T> pDati, DropDownList pDrop, string pText, string pValue, Label pLabelErrori)
        {
            pDrop.DataTextField = pText;
            pDrop.DataValueField = pValue;

            if (pDati.HaErrori)
            {
                pLabelErrori.Text += string.Format("Errore : {0} \r\n", pDati.Eccezione.Message);
            }
            else
            {
                pDrop.Items.Clear();

                pDrop.Items.Add(new ListItem(pText, pValue, true));

                pDrop.Items.FindByValue(pValue).Selected = true;

                pDrop.DataBind();

            }
        }//fM
        
        #endregion



    }
}
